package com.hyper_yang.javase.learnException.handleMethods;

import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;

/**
 * try catch
 * try {
 *
 * } catch (Exception e) {
 *
 * }
 */
public class CatchTest {

    @DisplayName("手动处理抛出的异常: ")
    @Test
    public void test01() {
        int[] arr = new int[5];
        try {
            System.out.println(arr[3]);
            System.out.println("访问了数组元素 3 ");

            System.out.println(arr[33]);
            System.out.println("访问了数组元素 33 ");

            System.out.println(10 / 0);

            Object object = null;
            object.hashCode();
        } catch (ArrayIndexOutOfBoundsException e) {
            System.out.println("检查数组越界");
//            throw new ArrayIndexOutOfBoundsException("检查数组越界");
        } catch (RuntimeException e) {
            System.out.println("出现了运行时异常");
        }catch (Exception e) {
            System.out.println("出现了之前都没catch异常");
        }
    }

    @DisplayName("finally Test: ")
    @Test
    public void test02() {
        try {
            System.out.println("窗前明月光");
            int n =0;
            // TODO 代码 try如果退出 JVM -System.exit(0) 那就不会出现
//            System.exit(0);
//            int m = 10 / n; // finally还是会执行
            int m = 10 / n;
            System.out.println("低头思故乡");
        } catch (ArithmeticException a) {
            System.out.println("出现了算数运算异常，除数不能为0");
//            a.printStackTrace();
            // TODO: 代码块作用域
//            System.out.println("出现了算数运算异常，除数不能为n: "+ n);
        } finally {
            // TODO: finally里的代码，无论如何都会执行
            System.out.println("程序结束");
            System.out.println("finally一般用于释放资源");
        }
        // 如果 没 catch住异常 或者 finally里面 return就不执行了
        System.out.println("嘿嘿嘿");
    }
}
